class Convenio < ActiveRecord::Base
  has_many_with_attributes  :bonificaciones
  has_many_with_attributes  :compromisos
  has_many_with_attributes  :objetivo_mensuales
  
  belongs_to  :ejecutivo

  validates_presence_of  :fecha_inicio, :fecha_termino, :participante_id

  CENTRO_CONSUMO = 1
  CORPORATIVO = 2

  # estados
  NUEVO = 1
  AUTORIZADO = 2
  VIGENTE = 3
  
  def self.vigentes_por_ejecutivo(ejecutivo_id)
    Convenio.find_all_by_ejecutivo_id(ejecutivo_id)

  end

  def validate_on_create
    errors.add(:bonificaciones, "no puede estar vac&iacute;o") if bonificaciones.nil? or bonificaciones.size == 0
    errors.add(:compromisos, "no puede estar vac&iacute;o") if compromisos.nil? or compromisos.size == 0

  end

  def agregar_compromiso(descripcion, responsable, importe=nil)
    logger.debug descripcion
    logger.debug responsable
    logger.debug importe unless importe.nil?
    compromisos << Compromiso.new(:descripcion => descripcion, :responsable => responsable, :importe => importe)

  end
  
  def consecutivo
    "%06d" % id + '/' + fecha_inicio.strftime("%Y")

  end
  
  def vigente?(fecha)
    fecha <= fecha_termino && fecha >= fecha_inicio
  end
  
  def self.recientes(ejecutivo)
    fecha_inicio = Time.now.beginning_of_week.strftime("%Y-%m-%d")
    fecha_fin = Time.now.tomorrow.strftime("%Y-%m-%d")
    ejecutivo_id = Ejecutivo.find(ejecutivo)
    conditions = [
      "created_at BETWEEN CONVERT(datetime, :fecha_inicio) AND CONVERT(datetime, :fecha_fin) AND ejecutivo_id = :ejecutivo_id",
      {:fecha_inicio => fecha_inicio, :fecha_fin => fecha_fin, :ejecutivo_id => ejecutivo_id}
    ]
    Convenio.find(:all, :conditions => conditions)
  end
  
  def self.por_vencer(ejecutivo)
    desde = Time.now.strftime("%Y-%m-%d")
    hasta = 30.days.from_now.strftime("%Y-%m-%d")
    ejecutivo_id = Ejecutivo.find(ejecutivo)
    these_children = ejecutivo_id.all_active_children
    conditions = [
      "fecha_termino BETWEEN CONVERT(datetime, :desde) AND CONVERT(datetime, :hasta) AND ejecutivo_id IN(:ejecutivo_id)",
      {:desde => desde, :hasta => hasta, :ejecutivo_id => these_children}
    ]
    
    Convenio.find(:all, :conditions => conditions)
  end
  
  def bonificaciones_aplicables(producto_id)
    ba = Array.new
    
    producto = Producto.find(producto_id)
    bonificaciones.each do |b|
      if b.marca_id.nil?
        ba << b if b.familia_id == producto.familia_id
      else
        ba << b if b.marca_id == producto.marca_id
      end
    end
    
    ba
  end
  
  def compromisos_cliente
    compromisos.find(:all, :conditions => {:responsable => Compromiso::CLIENTE})
  end
  
  def compromisos_cuervo
    compromisos.find(:all, :conditions => {:responsable => Compromiso::CASA_CUERVO})
  end
  
  def nombre_comercial
    nombre = ""
    case tipo_participante
    when Convenio::CENTRO_CONSUMO
      nombre = Centro.find(participante_id).nombre_comercial
    when Convenio::CORPORATIVO
      nombre = Corporativo.find(participante_id).nombre_comercial
    end
        
  end
  
  def region
    nombre_region = ''
    case tipo_participante
    when Convenio::CENTRO_CONSUMO
      nombre_region = Catalogo.valor('Regiones', Centro.find(participante_id).region_id)
    when Convenio::CORPORATIVO
      nombre_region = Catalogo.valor('Estados',Corporativo.find(participante_id).estado_id)
    end
  end
end
